package com.estagio.bean;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.context.RequestContext;

import com.estagio.entity.Marca;
import com.estagio.entity.Produto;
import com.estagio.session.MarcaSession;
import com.estagio.session.ProdutoSession;

@ManagedBean(name="produtoBean")
@SessionScoped
public class ProdutoBean {
	
	//PRODUTO
	private Produto produto = new Produto();
	private String mensagem;
	private DataModel dmProduto;	
	
	//MODALIDADE
	private Marca marca = new Marca();
	private Marca marcaSave = new Marca();
	private DataModel dmMarca;
	private Marca marcaSelecionada = new Marca();

	//GETTERS AND SETTERS	
	
	public String getMensagem() {
		return mensagem;
	}


	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}
		
	public Marca getMarcaSelecionada() {
		return marcaSelecionada;
	}


	public void setMarcaSelecionada(Marca marcaSelecionada) {
		this.marcaSelecionada = marcaSelecionada;
	}


	public Marca getMarca() {
		return marca;
	}

	public void setMarca(Marca marca) {
		this.marca = marca;
	}	

	public Marca getMarcaSave() {
		return marcaSave;
	}

	public void setMarcaSave(Marca marcaSave) {
		this.marcaSave = marcaSave;
	}


	public DataModel getDmMarca() {
		return dmMarca;
	}


	public void setDmMarca(DataModel dmMarca) {
		this.dmMarca = dmMarca;
	}
	
	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public DataModel getDmProduto() {
		return dmProduto;
	}


	public void setDmProduto(DataModel dmProduto) {
		this.dmProduto = dmProduto;
	}

	//METODOS PLANO

	public void saveProduto() {
		ProdutoSession session = new ProdutoSession();
		String mensagem = session.save(this.produto);
		FacesMessage faces = new FacesMessage(this.mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
		RequestContext.getCurrentInstance().update("panelManterProduto");
		RequestContext.getCurrentInstance().update("growl");
//		this.saveProdutoMarca();
	}

//	public void saveProdutoMarca() {
//		ProdutoMarcaSession session = new ProdutoMarcaSession();
//		String mensagem = session.save(this.arrayProdutoMarca);
//		FacesMessage faces = new FacesMessage(this.mensagem);
//		FacesContext contexto = FacesContext.getCurrentInstance();
//		contexto.addMessage(null, faces);		
//		RequestContext.getCurrentInstance().update("panelManterProduto");
//		RequestContext.getCurrentInstance().update("growl");
//	}
	
	public String deleteProduto() {
		ProdutoSession produtoRN = new ProdutoSession();		
		Produto produto = this.produto;
		this.mensagem = produtoRN.delete(produto);
		this.produto = new Produto();
		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		return "consultarProduto";
	}

	public DataModel findProduto() {
		ProdutoSession produtoSession = new ProdutoSession();
		this.produto = new Produto();
		List<Produto> lista = produtoSession.find(this.produto);
//		System.out.println("array no find produtoBean: " + lista.size());
		this.dmProduto = new ListDataModel(lista);
		return this.dmProduto;
	}
	
	public void clean() {
		this.produto = new Produto();
	}
	
	//DIALOG MARCA
	public DataModel findMarca() {
		List<Marca> listaMarca = new MarcaSession().find(this.marca);
		this.dmMarca = new ListDataModel(listaMarca);
		return this.dmMarca;
	}
	
	public void selectMarca() {
		Marca marca = (Marca) this.dmMarca.getRowData();
		this.produto.setMarca(marca);
		RequestContext.getCurrentInstance().update("pgMarca");
		RequestContext.getCurrentInstance().execute("dialogConsultarMarca.hide()");
	}
	
	//INVOCAR TELAS
	public String newProduto() {
		this.produto = new Produto();
		this.produto.setMarca(new Marca());
		return "manterProduto";
	}

	public String consultarProduto() {
		return "consultarProduto";
	}

	public String editarProduto() {
		this.produto = (Produto) this.dmProduto.getRowData();		
		return "editarProduto";
	}
	
	public String excluirProduto() {
		this.produto = (Produto) this.dmProduto.getRowData();
		return "excluirProduto";
	}
	
	//DIALOGS
	public void openDialogConsultarMarca() {
		this.marca = new Marca();
		RequestContext.getCurrentInstance().update("idDialogConsultarMarca");
		RequestContext.getCurrentInstance().execute("dialogConsultarMarca.show()");
	}
	
	
}
